package cn.com.dcsgo.sdk.payment.wechat.ltzf.payments.jumph5;

import cn.com.dcsgo.sdk.payment.wechat.ltzf.payments.jumph5.model.PrepayResponse;
import cn.com.dcsgo.sdk.payment.wechat.ltzf.payments.jumph5.model.QueryPayOrderResponse;
import cn.com.dcsgo.sdk.payment.wechat.ltzf.payments.jumph5.model.QueryRefundOrderResponse;
import cn.com.dcsgo.sdk.payment.wechat.ltzf.payments.jumph5.model.RefundOrderResponse;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Headers;
import retrofit2.http.POST;

/**
 * H5支付[跳转模式]API
 *
 * @author Dcsgo
 * @since 2024/8/15 下午4:1
 */

public interface IJumpH5PayApi {
    /**
     * 发送预付的HTTP请求到蓝兔支付的H5支付[跳转模式]API
     *
     * @param mchId      商户号
     * @param outTradeNo 商户订单号，只能是数字、大小写字母_-且在同一个商户号下唯一
     * @param totalFee   支付金额
     * @param body       商品描述
     * @param timestamp  当前时间戳(秒)
     * @param notifyUrl  支付通知地址，通知URL必须为直接可访问的URL，不允许携带查询串，要求必须为http或https地址
     * @param sign       签名
     * @return PrepayResponse(预付的响应封装类)
     */
    @POST("api/wxpay/jump_h5")
    @FormUrlEncoded
    @Headers("content-type:application/x-www-form-urlencoded")
    Call<PrepayResponse> prepay(
            @Field("mch_id") String mchId,
            @Field("out_trade_no") String outTradeNo,
            @Field("total_fee") String totalFee,
            @Field("body") String body,
            @Field("timestamp") String timestamp,
            @Field("notify_url") String notifyUrl,
            @Field("sign") String sign
    );

    /**
     * 订单退款API
     *
     * @param mchId       商户号
     * @param outTradeNo  商户订单号
     * @param outRefundNo 商户退款单号，只能是数字、大小写字母_-且在同一个商户号下唯一
     * @param timestamp   当前时间戳
     * @param refundFee   退款金额
     * @param refundDesc  退款描述
     * @param notifyUrl   退款通知地址，通知URL必须为直接可访问的URL，不允许携带查询串，要求必须为http或https地址
     * @param sign        签名
     * @return 订单退款响应实体类(RefundOrderResponse)
     */
    @POST("api/wxpay/refund_order")
    @FormUrlEncoded
    @Headers("content-type:application/x-www-form-urlencoded")
    Call<RefundOrderResponse> refundOrder(
            @Field("mch_id") String mchId,
            @Field("out_trade_no") String outTradeNo,
            @Field("out_refund_no") String outRefundNo,
            @Field("timestamp") String timestamp,
            @Field("refund_fee") String refundFee,
            @Field("refund_desc") String refundDesc,
            @Field("notify_url") String notifyUrl,
            @Field("sign") String sign
    );

    /**
     * 查询订单API
     *
     * @param mchId      商户号
     * @param outTradeNo 商户订单号
     * @param timestamp  当前时间戳
     * @param sign       签名
     * @return 查询订单响应实体类(QueryPayOrderResponse)
     */
    @POST("api/wxpay/get_pay_order")
    @FormUrlEncoded
    @Headers("content-type:application/x-www-form-urlencoded")
    Call<QueryPayOrderResponse> queryPayOrder(
            @Field("mch_id") String mchId,
            @Field("out_trade_no") String outTradeNo,
            @Field("timestamp") String timestamp,
            @Field("sign") String sign
    );

    /**
     * 查询退款结果API
     *
     * @param mchId       商户号
     * @param outRefundNo 商户退款单号
     * @param timestamp   当前时间戳
     * @param sign        签名
     * @return 查询退款结果响应实体类(QueryRefundOrderResponse)
     */
    @POST("api/wxpay/get_refund_order")
    @FormUrlEncoded
    @Headers("content-type:application/x-www-form-urlencoded")
    Call<QueryRefundOrderResponse> queryRefundOrder(
            @Field("mch_id") String mchId,
            @Field("out_refund_no") String outRefundNo,
            @Field("timestamp") String timestamp,
            @Field("sign") String sign
    );
}
